var net = require('net');

/*创建TCP服务器*/
var server = net.createServer({allowHalfOpen: true});

server.on('connection', function(socket){
	console.log("客户端与服务器端连接已建立")
	socket.setEncoding('utf8');

	// data事件--读取客户端发送的流数据
	socket.on('data', function(data){
		console.log("已接收到客户端发送的数据：" + data);
		socket.write("确认数据：" + data);
	});

	// end事件--client关闭连接
	socket.on('end', function(){
		console.log("客户端连接被关闭");
		// allowHalfOpen：true，必须使用与客户端连接的socket端口对象end方法主动关闭服务器连接
		// 否则，客户端由于没有收到服务器关闭连接的消息，却收到了服务器应用程序退出的消息，于是触发错误
		socket.end();
		// 指定当客户端被全部关闭时退出应用程序
		server.unref();
	});

	// close事件--socket端口彻底关闭
	socket.on('close', function(had_error){
		if(had_error){
			console.log("由于一个错误导致socket端口被关闭");
			server.unref();
		}
		else{
			console.log("socket端口被正常关闭");
		}
	});

	server.getConnections(function(err, count){
		if(count == 2){
			// 关闭服务器
			server.close();
		}
	});

	// 错误处理
	socket.on('error', function(err){
		console.log("与客户端连接或通信过程中发生了一个错误，错误编码为%s", err.code);
		// 错误发生，销毁socket端口对象
		socket.destory();
	});
});

server.listen(8433, 'localhost');

// close事件--服务器被关闭
server.on('close', function(){
	console.log("TCP服务器被关闭");
});